package com.it.d8_generics_method;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        // 目标：掌握泛型方法的定义和使用
        String rs = test("java");
        System.out.println(rs);

        Dog d = test(new Dog());

        System.out.println(d);

        // 需求：所有的汽车可以一起参加比赛
        ArrayList<Car> cars = new ArrayList<>();
        cars.add(new BENZ());
        cars.add(new BMW());
        go(cars);

        ArrayList<BMW> bmws = new ArrayList<>();
        bmws.add(new BMW());
        bmws.add(new BMW());
        go(bmws);

//        ArrayList<Dog> dogs = new ArrayList<>();
//        dogs.add(new Dog());
//        dogs.add(new Dog());
//        go(dogs); // dogs不属于Car的对象，也不属于Car的子类


    }



//    public static void go(ArrayList<Car> cars) {
//
//    }

//    public static <T extends Car> void go(ArrayList<T> cars) {
//
//    }

    // ? => 通配符， 在使用泛型的时候可以代表一切类型;
    // ? extends Car(上限) 只能接收 Car 或 Car的子类;
    // ? super Car(下限) 只能接收 Car 或 Car的父类
    public static void go(ArrayList<? extends Car> cars) { // 只能接收 Car 或 Car的子类

    }

    // 泛型方法
    public static <T> T test(T t) {
        return t;
    }
}
